#include<bits/stdc++.h>
using namespace std;

class Solution {
public:
    int findMaximizedCapital(int k, int w, vector<int>& profits, vector<int>& capital) {
        vector<pair<int, int>> pr;
        for(int i = 0; i < capital.size(); i++)pr.push_back({profits[i], capital[i]});
        sort(pr.begin(), pr.end(), [&](pair<int, int>& a, pair<int, int>& b) -> bool{
            return a.second < b.second;
        });
        priority_queue<int, vector<int>, less<int>> q;
        int i = 0;
        do{
            for(; i < pr.size(); i++){
                if(pr[i].second <= w)q.push(pr[i].first);
                else break;
            }
            if(q.empty() || !k)break;
            w += q.top();
            q.pop();
            k--;
        }while(true);
        return w;
    }
};

/**
 * 2021.9.8
 * 贪心 + 最大堆的思想
 * -每次我们都从能取的堆里取最大的利润
 * -每次我们更新完利润后都把新的能取的项目放进堆里
 * 重复以上过程直到堆里 没东西 或者 k 为 0 为止。
 */